from typing import List

from langchain_community.llms import Tongyi
from langchain.prompts import ChatPromptTemplate
from langchain_core.pydantic_v1 import BaseModel, Field
from langchain.output_parsers import PydanticOutputParser
import os

from langchain_openai import ChatOpenAI

os.environ["DASHSCOPE_API_KEY"] = 'sk-c44402d7a12c41299bb716af8d7e8bac'


class Book(BaseModel):
    title: str = Field(description="书名", examples="剑来")
    author: str = Field(description="作者", examples="烽火戏诸侯")
    book_type: List[str] = Field(description="类型", examples=["玄幻", "修真", "奇幻"])


output_parser = PydanticOutputParser(pydantic_object=Book)

output_content = output_parser.get_format_instructions()

prompt_template = ChatPromptTemplate.from_messages(
    [
        ('system', '{output_content} \n 你是一个熟练提取书籍信息内容的智能助手， 可以从我提供的书籍信息中提取出书籍的名称、作者和类型，你只能通过我提供的书籍内容进行回复，书籍内容使用 ### '
                   '书籍内容 ### 标记。'),
        ('human', '{user_input}')
    ]
)

user_input = """
        书籍内容：
            《明朝那些事儿》，网络连载人文社科历史作品，作者是当年明月，本名石悦，曾为广东顺德海关公务员，2018年5月24日出任山东省政府办公厅综合处处长。2006年3月在天涯社区首次发表，2009年3月21日连载完毕，边写作边集结成书出版发行，一共7本。
            《明朝那些事儿》主要讲述的是从1344年到1644年这三百年间关于明朝的一些故事。以史料为基础，以年代和具体人物为主线，并加入了小说的笔法，语言幽默风趣。对明朝十六帝和其他王公权贵和小人物的命运进行全景展示，尤其对官场政治、战争、帝王心术着墨最多，并加入对当时政治经济制度、人伦道德的演义。
            它以一种网络语言向读者娓娓道出三百多年关于明朝的历史故事、人物。其中原本在历史中陌生、模糊的历史人物在书中一个个变得鲜活起来。《明朝那些事儿》为读者解读历史中的另一面，让历史变成一部活生生的生活故事。
        """

prompt = prompt_template.invoke({'user_input': user_input, 'output_content': output_content})

# llm = Tongyi()
llm = ChatOpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),  # 如果您没有配置环境变量，请在此处用您的API Key进行替换
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",  # 填写DashScope base_url
    model="qwen-plus"
)

chain = prompt_template | llm | output_parser

# response = llm.invoke(prompt)
# print(response)
# result = output_parser.parse(response)
# print(result)

response = chain.invoke({'output_content': output_content, 'user_input': user_input})

print(response)
